home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 2: CDPD 1
/
Almathera Ten on Ten - Disc 2: CDPD 1.iso
/
pd
/
276-300
/
299
/
rxil
/
src
/
lock.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-03-14
|
3KB
|
125 lines
/* lock.c */
/* Copyright © 1989 by Donald T. Meyer, Stormgate Software
* All Rights Reserved
*/
#include "rxil.h"
/* NAME
* RxilCmdLock
*
* SYNOPSIS
* RxilCmdLock( rexxmsg );
*
* struct RexxMsg *rexxmsg;
*
* FUNCTION
* This is a "command" which would be called from the dispatch
* function. This would handle the "LOCK" command that an ARexx
* program could send to the application requesting access to
* the private port.
*
* INPUTS
* rexxmsg A pointer to a RexxMsg structure.
*
* RESULT
* None
*
* SIDES
*
* HISTORY
* 01-Aug-89 Creation.
*
* BUGS
*
* SEE ALSO
* RxilCmdUnlock()
*/
void RxilCmdLock( struct RexxMsg *rexxmsg )
{
/* Check for wether or not the program which issued this command is
* set to receive a result string (options results).
* Normally this would be handled downstream by RxilCheckResult()
* but in this case we need to know wether or not to set the
* locked flag. Why do we need to know this? Because we don't
* want to lock if the external program won't be able to receive
* our adrress (and therefore never UNlock us!).
*/
if( FlagIsClear( rexxmsg->rm_Action, RXFF_RESULT ) )
{
rexxmsg->rm_Result1 = RXERR_REQUIRES_RESULT_FLAG;
return;
}
if( global_rdef->LockCount != 0 )
{
/* We are already locked. Return a failure code. */
rexxmsg->rm_Result1 = RXERR_ALREADY_LOCKED;
}
else
{
RxilSetResult( rexxmsg, global_rdef->SecretPortName );
++global_rdef->LockCount;
}
}
/* NAME
* RxilCmdUnlock
*
* SYNOPSIS
* RxilCmdUnlock( rexxmsg );
*
* struct RexxMsg *rexxmsg;
*
* FUNCTION
* This is a "command" which would be called from the dispatch
* function. This would handle the "UNLOCK" command that an
* ARexx program could send to the application requesting
* access to the private port.
*
* Note: The privilege level for this command should be "secret",
* since anyone who locked us will be able to meet that level,
* and those who have not locked us can't slip the lock out
* from under those who did (so to speak).
*
* INPUTS
* rexxmsg A pointer to a RexxMsg structure.
*
* RESULT
* None
*
* SIDES
*
* HISTORY
* 01-Aug-89 Creation.
*
* BUGS
*
* SEE ALSO
* RxilCmdLock()
*/
void RxilCmdUnlock( struct RexxMsg *rexxmsg )
{
if( global_rdef->LockCount != 0 )
{
/* We are already locked. This is a valid command. */
--global_rdef->LockCount;
}
else
{
/* We are not locked. Tell caller about their error. */
rexxmsg->rm_Result1 = RXERR_NOTHING_TO_UNLOCK;
}
}